package com.tools.db.jdbc;

import com.tools.common.object.Note;

/**
 * 数据库排序方式的枚举
 * ASC 为顺序，DESC 为逆序
 * */
@Note("数据库排序方式的枚举" +
        "ASC 为顺序，DESC 为逆序")
public enum SortEnum {

    ASC(0, "ASC"),
    DESC(1, "DESC");

    private final int code;
    private final String value;


    SortEnum(int code, String value) {
        this.code = code;
        this.value = value;
    }

    public int getCode() {
        return code;
    }

    public String getValue() {
        return value;
    }

    public boolean eq(String value) {
        return this.value.equals(value);
    }

    public boolean eqIgnoreCase(String value) {
        return this.value.equalsIgnoreCase(value);
    }

    @Override
    public String toString() {
        return value;
    }

    @Note("安全地根据枚举实例对应的代码获取枚举实例，获取不到不会抛异常")
    public static SortEnum getEnumSafe(int code) {
        switch (code) {
            case 0 : return ASC;
            case 1 : return DESC;
        }
        return null;
    }

    @Note("根据枚举实例对应的代码获取枚举实例，获取不到会抛异常")
    public static SortEnum getEnum(int code) {
        SortEnum res = getEnumSafe(code);
        if(res == null) throw new IllegalArgumentException("不知道 " + code + " 是对应什么枚举实例");
        return res;
    }


    @Note("安全地根据枚举实例对应的名称获取枚举实例，获取不到不会抛异常")
    public static SortEnum getEnumSafe(String value) {
        if(ASC.value.equalsIgnoreCase(value)) return ASC;
        if(DESC.value.equalsIgnoreCase(value)) return DESC;
        return null;
    }


    @Note("根据枚举实例对应的名称获取枚举实例，获取不到会抛异常")
    public static SortEnum getEnum(String value) {
        SortEnum res = getEnumSafe(value);
        if(res == null) throw new IllegalArgumentException("不知道 " + value + " 是对应什么枚举实例");
        return res;
    }
}
